package Song.Han.demo04;

/*
解决线程安全问题的第二种方案：同步方法
步骤：
    1。抽取访问了共享数据的代码，放入一个方法中
    2.在方法上添加synchronized修饰符
格式：
    修饰符 synchronized 返回值类型 方法名(参数列表){
        ...
    }
注意：
    同步方法的多对象就是实现类对象本身

*/
public class RunnableImpl02 implements Runnable {
    private int ticket = 100;

    @Override
    public void run() {
        System.out.println(this);
        //判断是否有票
        while (ticket > 0) {
            payTicket();
        }
    }

    //定义一个同步方法
    public synchronized void payTicket() {

        if (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");
            ticket--;
        }
    }


}
